Skip to content

Add Fedora as variant alongside Ubuntu defaults#305

Open
JBailes wants to merge 22 commits intomasterfrom
fedora-variant-images
Open

Add Fedora as variant alongside Ubuntu defaults#305
JBailes wants to merge 22 commits intomasterfrom
fedora-variant-images

Conversation

@JBailes
Copy link
Copy Markdown
Contributor

@JBailes JBailes commented Apr 2, 2026

Summary

Builds on #282 by keeping Ubuntu as the default and adding Fedora as a tagged alternative, rather than replacing Ubuntu entirely. Adds Fedora variants for all GOW images.

  • Adds self-contained build-fedora/ directories for every image
  • Adds variant input to the reusable CI workflow, controlling build path, tag suffix, cache keys, and artifact names
  • Adds a parallel Fedora build chain in auto-build.yml (runs alongside the unchanged Ubuntu chain)
  • Applies the is_fork CI detection fixes from WIP: Move GOW images to Fedora #282
  • Fixes steamos-dbus-watchdog.sh duplicate -shutdown line
  • Cleans up Debian-isms (DEBIAN_FRONTEND, NEEDRESTART_SUSPEND) from Fedora Dockerfiles

Images with Fedora variants

Image Fedora approach
base Fedora 43 base with dnf
base-app Mesa/Gamescope/Sway via dnf
base-emu RPM Fusion retroarch + AppImage emulators
pulseaudio alsa-lib + pulseaudio via dnf
firefox dnf install firefox
steam RPM Fusion + custom steam.sh wrapper
retroarch RPM Fusion
kodi dnf
xfce @xfce-desktop-environment group
prismlauncher COPR repo
pegasus AppImage approach
es-de AppImage (distro-agnostic)
heroic-games-launcher RPM + Wine from RPM Fusion
lutris dnf + Wine + patched bwrap

Tagging

Event Ubuntu (unchanged) Fedora
Push to master edge edge-fedora, fedora, fedora-43
Tag v1.2.3 1.2.3, 1, latest 1.2.3-fedora, 1-fedora
Branch push branch-name branch-name-fedora

Directory layout

Each image gets a build-fedora/ alongside its existing build/:

images/base/build/          ← Ubuntu (untouched)
images/base/build-fedora/   ← Fedora (new)
...same pattern for all images...

CI structure

Ubuntu chain (unchanged):
  base → base-app → base-emu → emus (pegasus, es-de)
                  → apps (all 9 apps)

Fedora chain (new, runs in parallel):
  base-fedora → base-app-fedora → base-emu-fedora → emus-fedora (pegasus, es-de)
                                → apps-fedora (all 9 apps)

Test plan

  • Ubuntu CI chain produces identical images/tags as before
  • Fedora CI chain builds all images
  • ghcr.io/games-on-whales/steam:edge → Ubuntu
  • ghcr.io/games-on-whales/steam:edge-fedora → Fedora
  • ghcr.io/games-on-whales/steam:fedora → Fedora (standalone tag)
  • Wine/32-bit apps (lutris, heroic) build successfully on Fedora

Add Fedora-based Docker images for base, base-app, firefox, and steam
as an alternative to the existing Ubuntu images. Ubuntu remains the
default; Fedora images are tagged with -fedora suffix (e.g. edge-fedora)
plus standalone fedora and fedora-43 tags.

- Add build-fedora/ directories with self-contained Fedora Dockerfiles
  and scripts for base, base-app, firefox, and steam
- Add variant input to reusable workflow controlling build path, tag
  suffix, cache keys, and artifact names
- Add parallel Fedora build chain in auto-build.yml
- Fix is_fork detection in CI (replaces pull_request event checks)
- Fix steamos-dbus-watchdog.sh duplicate -shutdown line
- Clean up Debian-isms from Fedora Dockerfiles
@JBailes JBailes changed the base branch from dev-fedora-images to master April 2, 2026 16:43
Add build-fedora/ directories with Fedora Dockerfiles for:
- base-emu (RPM Fusion retroarch + AppImage emulators)
- pulseaudio (alsa-lib + pulseaudio via dnf)
- retroarch (RPM Fusion)
- kodi (dnf)
- xfce (Fedora XFCE group + Firefox)
- prismlauncher (COPR repo)
- pegasus (AppImage approach)
- es-de (AppImage, distro-agnostic)
- heroic-games-launcher (RPM + Wine from RPM Fusion)
- lutris (dnf + Wine + patched bwrap from RPM Fusion)

Update auto-build.yml CI to add:
- base-emu-fedora chain for emulator images
- emus-fedora matrix (pegasus, es-de)
- Full apps-fedora matrix with all images
JBailes and others added 7 commits April 2, 2026 17:13
- base-emu: replace removed xorg-x11-server-utils with xrandr
- lutris: replace SDL2.i686 with sdl2-compat.i686, xorg-x11-server-utils with xrandr
- heroic-games-launcher: replace SDL2.i686 with sdl2-compat.i686
- prismlauncher: remove java-17-openjdk and java-1.8.0-openjdk (unavailable on F43)
- kodi: add RPM Fusion repos (kodi package lives there, not in base repos)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The merge job's digest download pattern digests-base-* was matching
both digests-base-linux-amd64 (Ubuntu) and digests-base-fedora-linux-amd64
(Fedora), causing the Ubuntu base:sha-xxx tag to point to a manifest
containing the Fedora digest. This made base-app (Ubuntu) fail with
'apt-get: command not found' since it inherited a Fedora image.

Fix by prefixing variant artifacts: digests-fedora-base-linux-amd64,
so digests-base-* only matches Ubuntu digests.

Also move tag suffix from global flavor to per-tag suffix= to prevent
standalone 'fedora' and 'fedora-43' tags from becoming 'fedora-fedora'.
- kodi: remove 'service dbus start' (not available on Fedora, handled
  at runtime by overlay script 99-startdbus.sh)
- pegasus: remove fuseiso and compat-openssl11 (not in Fedora 43 repos)
- steam/lutris (both variants): change bwrap-builder stage from
  ubuntu:25.04/fedora:43 to ${BASE_APP_IMAGE} to avoid Docker Hub
  rate limits (429 Too Many Requests) from parallel pulls
- pegasus (fedora): use x11-static.zip instead of nonexistent AppImage
- Bump all actions to latest major versions supporting Node.js 24:
  checkout v4→v6, cache v4→v5, upload-artifact v4→v7,
  download-artifact v4→v8, metadata-action v5→v6,
  setup-qemu-action v3→v4, setup-buildx-action v3→v4,
  login-action v3→v4, build-push-action v6→v7
- Remove deprecated 'install: true' from setup-buildx-action
- Add default BASE_APP_IMAGE to firefox/steam Fedora Dockerfiles
  to fix InvalidDefaultArgInFrom lint warning
@MNarath1
Copy link
Copy Markdown

MNarath1 commented Apr 3, 2026

Would it be possible to add protontricks into the steam image? Its usually a hassle if you have to use it to change the proton enviroment. And while it has become better there are still games that require it or in case you want to use mods.

@JBailes
Copy link
Copy Markdown
Contributor Author

JBailes commented Apr 3, 2026

Would it be possible to add protontricks into the steam image? Its usually a hassle if you have to use it to change the proton enviroment. And while it has become better there are still games that require it or in case you want to use mods.

I might be interested in doing it, but not in this PR. This PR is already huge.

@ApexArray
Copy link
Copy Markdown

I'm interested in trying this out. The current Ubuntu-based retroarch image randomly freezes on some games when using the Vulkan backend and I'm curious if a Fedora image would be more stable.

Are these images ready to test, or is it still WIP?

@MNarath1
Copy link
Copy Markdown

I'm interested in trying this out. The current Ubuntu-based retroarch image randomly freezes on some games when using the Vulkan backend and I'm curious if a Fedora image would be more stable.

Are these images ready to test, or is it still WIP?

should be as easy as just changing the image tag in the config file with the fedora variants mentioned here https://github.com/games-on-whales/gow/pkgs/container/steam

@MNarath1
Copy link
Copy Markdown

Its already merged into another branch so i guess it got just automatically build

@MNarath1
Copy link
Copy Markdown

Using nested gamescope at first crashed the container but on second try it seems to work fine now an improvement over the ubuntu image since there nested gamescope is completly unusable

Comment on lines +25 to +26
mkdir -p "$STEAMDIR/debian-installation"
touch "$STEAMDIR/debian-installation/.cef-enable-remote-debugging"
Copy link
Copy Markdown

@MNarath1 MNarath1 Apr 10, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
mkdir -p "$STEAMDIR/debian-installation"
touch "$STEAMDIR/debian-installation/.cef-enable-remote-debugging"
touch "$STEAMDIR/.cef-enable-remote-debugging"
ln -fs --no-target-directory "$STEAMDIR/compatibilitytools.d" "$STEAMDIR_LEGACY/compatibilitytools.d"
ln -fs --no-target-directory "$STEAMDIR_LEGACY/steamapps" "$STEAMDIR/steamapps"

With this change decky loader should work out of the box for people again.
With the symlink things like Decky's WineCellar Plugin should again work out of the box too
Last symlinks allows the lossless scaling plugin to detect the install of Lossless Scaling (has to be installed in the containers default Steam Library)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The debian installation directory is redundant since its no longer used.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will probably add a seperate PR for the Ubuntu side too but this would fix it immidiatly for the fedora image.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is however still an issue with decky loader beeing unable to update last time i tried i haven't figured out a fix for that yet besides deleting the homebrew folder.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

--no-target-directory for the symlinks are needed otherwise ln treats the symlinks as actual paths to drop the file into if the symlink already exists.

@@ -0,0 +1,2 @@
#!/bin/bash
service dbus start
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

when trying to start the xfce container i get back
7/opt/gow/startdbus: line 2: service: command not found

JBailes and others added 2 commits April 11, 2026 17:24
- xfce: fix startdbus.sh failing with "service: command not found" on
  Fedora by invoking dbus-daemon directly
- steam: drop redundant debian-installation path and add
  compatibilitytools.d/steamapps symlinks so Decky WineCellar and
  Lossless Scaling plugins work out of the box

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds three media-client apps following the existing per-app pattern,
each with Ubuntu build/ and Fedora build-fedora/ variants:

- plex:    Plex HTPC .deb/.rpm pulled from plex.tv downloads API
- emby:    Emby Theater Electron tarball from GitHub releases
- youtube: FreeTube .deb/.rpm from GitHub releases (ad-free YT client)

All three wire into the apps and apps-fedora CI matrices in auto-build.yml.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- plex: install real Plex HTPC from the upstream tarball at
  artifacts.plex.tv, resolving the current version from the Flathub
  manifest (Plex only publishes HTPC for Linux via Flathub — no .deb/.rpm
  or AppImage exists)
- emby: use the actual emby-theater .deb/.rpm assets from the
  emby-theater-electron GitHub release (regex now matches the real names)
- youtube: fetch FreeTube from /releases?per_page=1 since every FreeTube
  release is marked prerelease (so /releases/latest 404s), and fix Fedora
  regex to match amd64.rpm (FreeTube uses amd64 even on x86_64 rpms)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@MNarath1
Copy link
Copy Markdown

xfce now fails with

wolf-1  | ,bash: line 1: startxfce4: command not found

virant and others added 3 commits April 11, 2026 17:55
Plex does not publish .deb/.rpm/AppImage builds of HTPC for Linux and the
raw tarball at artifacts.plex.tv is blocked by Cloudflare bot-management,
so flatpak is the only reliable install path. Launch with
`flatpak run tv.plex.PlexHTPC` at runtime.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…tube

apps: add Plex HTPC, Emby Theater, and FreeTube (YouTube ad-free)
Use public.ecr.aws/ubuntu/ubuntu and quay.io/fedora/fedora instead of
docker.io to avoid Docker Hub pull rate limits, which have been failing
PR builds with 429 errors. Both mirrors are operated by the respective
vendors (Canonical / Red Hat) and are rate-limit-free.
@JBailes JBailes force-pushed the fedora-variant-images branch from 53d4d1f to e175ac1 Compare April 11, 2026 18:23
JBailes added 2 commits April 11, 2026 18:43
The quay.io/fedora/fedora:43 base image ships with the ffmpeg-free
subsystem preinstalled, which conflicts with the full ffmpeg package
from rpmfusion-free that base-emu requires. Pass --allowerasing so dnf
swaps the preinstalled libswresample-free for the rpmfusion version.
If flatpak is not present in the image for any reason, the unguarded
flatpak remote-add call combined with set -e crashes XFCE startup on
first launch. Skip the flathub setup and log when flatpak is missing
instead of failing the container.
JBailes and others added 5 commits April 11, 2026 19:26
…|| true

The Fedora xfce image was shipping with zero packages installed from this
RUN: gnome-software-plugin-flatpak is a Debian/Ubuntu name and doesn't
exist on Fedora (the flatpak plugin is built into gnome-software itself),
so dnf5 aborted the whole transaction with "No match for argument". The
trailing `&& dnf remove -y foot 2>/dev/null || true && dnf clean all`
then masked the failure under shell precedence ((A && B) || true) && D,
so BuildKit saw exit 0 and cached an empty layer. Every later build
imported that broken layer from the registry cache, which is why users
hit `dbus-launch: command not found` and `startxfce4: command not found`
at runtime even though CI was green.

Drop gnome-software-plugin-flatpak and brace-group the foot removal so
`|| true` can only ever mask that one command. Editing the Dockerfile
also invalidates the BuildKit cache, forcing a real rebuild.
/usr/games/gamescope is Ubuntu-specific; Fedora installs gamescope to
/usr/bin/gamescope. Use command -v gamescope in both init-gamescope.sh
and launch-comp.sh so the binary is found regardless of distro.

Also guard the chown in init-gamescope.sh against gamescope being absent,
preventing a hard container crash on startup.

Fixes wolf:fedora dying at boot with:
  chown: cannot access '/usr/games/gamescope': No such file or directory
The community PPA (prism-launcher-for-debian) has been unreliable:
the plucky package 404s and the noble package requires libqt6dbus6t64
which was renamed on Ubuntu 25.04. Switch to the official Qt6 portable
tarball from GitHub releases instead — self-contained, no PPA needed.
test() with regex backslashes gets mangled inside the Docker heredoc;
use the same contains()+endswith() pattern as all other github_download
calls in this repo.
fix: resolve gamescope path dynamically for Fedora compatibility
Copy link
Copy Markdown

@MNarath1 MNarath1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really do not like the idea of this Enviromental Variables but on the other side i haven't seen this path actually beeing used at all by Steam.
But even if it did trying to overwrite the Variable in the config doesn't work probably cause its set after the Enviromental Variables from the config already got applied.
Also even if it worked it would mess up Games for People that do not have cloud saves since they would not get migrated over.

Comment on lines +10 to +11
export WINEPREFIX="$HOME/.local/share/WolfSteam/pfx"
export STEAM_COMPAT_DATA_PATH="$WINEPREFIX"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't actually seem to do anything and even if it did it cannot be overwriten by Enviroment Variables set in the config i think this should just be removed

Suggested change
export WINEPREFIX="$HOME/.local/share/WolfSteam/pfx"
export STEAM_COMPAT_DATA_PATH="$WINEPREFIX"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants